05-도메인ALB연결

도메인을 ALB로 연결

상황 파악

현재 상태

Week3.5의 01-04단계를 완료하여 ALB가 구축된 상태에서 진행합니다.

현재 접속 방법:

목표 상태

전환 과정 개요

1. Certificate Manager에서 SSL 인증서 발급
2. ALB에 HTTPS 리스너 추가 및 SSL 적용
3. Route 53에서 도메인을 ALB로 변경
4. Apache에서 SSL 설정 제거
5. 동작 확인 및 최적화

1단계: Certificate Manager 인증서 발급

ALB용 SSL 인증서 생성

  1. Certificate Manager 콘솔 접속 (ap-northeast-2 리전 확인)
  2. 인증서 요청 클릭
  3. 퍼블릭 인증서 요청 선택
  4. 인증서 설정:
    • 도메인 이름: yourdomain.com
    • 이 인증서에 다른 이름 추가: www.yourdomain.com
  5. 검증 방법: DNS 검증
  6. 키 알고리즘: RSA 2048
  7. 요청 클릭

Route 53에서 DNS 검증

  1. 발급된 인증서 상세 페이지에서 Route 53에서 레코드 생성 클릭
  2. 레코드 생성 확인
  3. 자동으로 CNAME 레코드가 추가됨
  4. 5-10분 대기 후 인증서 상태가 발급됨으로 변경 확인

인증서 발급 확인

# 명령어로 인증서 발급 상태 확인
aws acm list-certificates --region ap-northeast-2

# 특정 인증서 상세 정보 확인
aws acm describe-certificate --certificate-arn arn:aws:acm:ap-northeast-2:xxxxx:certificate/xxxxx --region ap-northeast-2

2단계: ALB에 SSL 인증서 적용

HTTPS 리스너 추가

  1. EC2 콘솔로드 밸런서webapp-alb 선택
  2. 리스너 및 규칙 탭 클릭
  3. 리스너 추가 클릭

HTTPS 리스너 설정

리스너 구성:

보안 설정:

HTTP → HTTPS 리다이렉트 설정

  1. 기존 HTTP:80 리스너 선택
  2. 작업편집 클릭
  3. 기본 작업 변경:
    • 작업 유형: 리디렉션
    • 프로토콜: HTTPS
    • 포트: 443
    • 상태 코드: 301 - 영구적으로 이동됨
  4. 저장 클릭

ALB 보안 그룹 확인

ALB 보안 그룹에 HTTPS 포트 추가:

  1. ALB 세부 정보보안
  2. 연결된 보안 그룹 클릭
  3. 인바운드 규칙 편집
  4. 규칙 추가:
    • 유형: HTTPS
    • 포트 범위: 443
    • 소스: 0.0.0.0/0
  5. 규칙 저장

3단계: Route 53 DNS 변경

기존 A 레코드 백업

00단계를 통해 현재 설정을 기록해두세요:

현재 설정 (웹서버 직접 연결):

대상 변경 사항:

ALB 별칭 레코드로 변경

루트 도메인 (공백) 레코드 변경:

  1. Route 53호스팅 영역 → 본인 도메인
  2. 기존 A 레코드 (Web서버-IP) 선택 → 삭제
  3. 레코드 생성 클릭:
    • 레코드 이름: (공백)
    • 레코드 유형: A - IPv4 주소
    • 별칭: 예
    • 트래픽 라우팅 대상:
      • Application/Classic Load Balancer에 대한 별칭
      • 아시아 태평양(서울) ap-northeast-2
      • webapp-alb 선택
    • 레코드 생성

www 서브도메인 레코드 변경:

  1. 기존 www A 레코드 삭제
  2. 레코드 생성:
    • 레코드 이름: www
    • 나머지 설정은 루트 도메인과 동일
    • 레코드 생성

DNS 전파 확인

# DNS 변경 확인
nslookup yourdomain.com

# ALB DNS 이름이 반환되는지 확인
dig yourdomain.com

# 예상 결과: ALB DNS 이름이 CNAME으로 표시

DNS 전파 온라인 확인:

4단계: Apache SSL 설정 제거

ALB에서 SSL을 처리하므로 Apache의 SSL 설정을 제거합니다.

Web 서버 접속

ssh -i webapp-keypair.pem ec2-user@Web서버-Public-IP

Let's Encrypt 인증서 제거

# 현재 인증서 목록 확인
sudo certbot certificates

# 인증서 삭제 (자동으로 Apache 설정도 정리)
sudo certbot delete --cert-name yourdomain.com

# 확인 메시지에서 'Y' 입력

Apache 설정 정리

# SSL 관련 설정 파일 백업
sudo cp /etc/httpd/conf.d/yourdomain.com-le-ssl.conf /etc/httpd/conf.d/yourdomain.com-le-ssl.conf.backup 2>/dev/null || echo "SSL 설정 파일 없음"

# SSL 설정 파일 제거
sudo rm -f /etc/httpd/conf.d/yourdomain.com-le-ssl.conf

# 기본 가상 호스트를 HTTP 전용으로 설정
sudo nano /etc/httpd/conf.d/webapp.conf

Apache 가상 호스트 설정 (HTTP 전용):

<VirtualHost *:80>
    ServerName yourdomain.com
    ServerAlias www.yourdomain.com
    DocumentRoot /var/www/html
    
    # JSP 요청을 Tomcat으로 프록시
    ProxyPreserveHost On
    ProxyPass /webapp/ http://WAS서버-Private-IP:8080/webapp/
    ProxyPassReverse /webapp/ http://WAS서버-Private-IP:8080/webapp/
    
    # 정적 파일 디렉토리 설정
    <Directory "/var/www/html">
        AllowOverride None
        Require all granted
    </Directory>
    
    # 로그 설정
    ErrorLog logs/yourdomain_access.log
    CustomLog logs/yourdomain_access.log combined
</VirtualHost>

Apache 재시작 및 확인

# 설정 문법 확인
sudo httpd -t

# Apache 재시작
sudo systemctl restart httpd

# 상태 확인
sudo systemctl status httpd

# 포트 443 리스닝 중단 확인
sudo netstat -tlnp | grep :443
# 결과: 아무것도 나오지 않아야 함

# 포트 80만 리스닝 확인
sudo netstat -tlnp | grep :80

cron 자동 갱신 작업 제거

# crontab 편집
sudo crontab -e

# Let's Encrypt 갱신 라인 제거 또는 주석 처리
# 0 2 * * * /usr/bin/certbot renew --quiet && /bin/systemctl reload httpd

# cron 작업 확인
sudo crontab -l

5단계: 전체 시스템 동작 확인

HTTPS 접속 테스트

기본 접속 확인:

https://yourdomain.com/webapp/
https://www.yourdomain.com/webapp/

HTTP 리다이렉트 확인:

http://yourdomain.com/webapp/ → https로 자동 전환
http://www.yourdomain.com/webapp/ → https로 자동 전환

SSL 인증서 확인

  1. 브라우저 주소창 자물쇠 아이콘 클릭
  2. 인증서 정보 확인:
    • 발급자: Amazon (Certificate Manager)
    • 주체: yourdomain.com
    • 유효기간: 1년 (자동 갱신)

트래픽 흐름 확인

전체 요청 경로:

사용자 → yourdomain.com (Route 53)
      → ALB (HTTPS 종료, Certificate Manager)
      → Web서버 (Apache, HTTP)
      → WAS서버 (Tomcat)
      → RDS

Apache 로그에서 ALB 요청 확인:

# Apache 액세스 로그 실시간 확인
sudo tail -f /var/log/httpd/yourdomain_access.log

# 별도 터미널에서 웹사이트 접속하여 로그 확인

예상 로그 형태:

10.0.1.x - - [09/Sep/2025:15:30:45 +0000] "GET /webapp/ HTTP/1.1" 200 1024
# IP가 ALB의 Private IP로 표시됨

ALB Health Check 확인

  1. EC2 콘솔대상 그룹webapp-web-targets
  2. 대상 탭에서 상태 확인
  3. 상태: healthy 표시 확인
  4. 상태 확인 세부 정보에서 성공적인 응답 확인

6단계: 성능 및 최적화

응답 시간 비교

ALB 경유 응답 시간 측정:

# HTTPS 응답 시간 확인
curl -w "Total: %{time_total}s, SSL: %{time_appconnect}s\n" \
     -o /dev/null -s https://yourdomain.com/webapp/

# 여러 번 테스트하여 평균 확인
for i in {1..5}; do
  curl -w "Request $i: %{time_total}s\n" -o /dev/null -s https://yourdomain.com/webapp/
done

ALB 로그 활성화 (선택사항)

# AWS CLI로 ALB 액세스 로그 활성화
aws elbv2 modify-load-balancer-attributes \
  --load-balancer-arn arn:aws:elasticloadbalancing:ap-northeast-2:xxxxx:loadbalancer/app/webapp-alb/xxxxx \
  --attributes Key=access_logs.s3.enabled,Value=true Key=access_logs.s3.bucket,Value=my-alb-logs

완료 체크리스트

Certificate Manager 설정

ALB SSL 구성

DNS 및 Apache 변경

동작 확인

성능 검증

트러블슈팅

DNS 변경이 반영되지 않는 경우

해결 방법:

  1. TTL 대기: DNS 캐시 TTL 시간(300초) 대기
  2. DNS 캐시 플러시:
    # Windows
    ipconfig /flushdns
    
    # Mac/Linux
    sudo systemctl flush-dns
    
  3. 다른 네트워크에서 테스트 (모바일 데이터 등)

ALB 접속 불가

점검 순서:

  1. ALB 상태: 활성 상태 확인
  2. 대상 그룹: healthy 상태 확인
  3. 보안 그룹: 포트 443 허용 확인
  4. 인증서: 발급 완료 상태 확인

Apache 500 에러

로그 확인:

# Apache 에러 로그 확인
sudo tail -f /var/log/httpd/error_log

# 가상 호스트 에러 로그 확인  
sudo tail -f /var/log/httpd/yourdomain_error.log

일반적인 해결책:

이점 및 개선사항

Certificate Manager 사용 이점

관리 편의성:

확장성:

보안 강화:

아키텍처 개선

이전 구조 (Week3 + 00단계):

사용자 → Route 53 → Apache (SSL 종료) → Tomcat → RDS

현재 구조 (Week3.5 + 도메인 연결):

사용자 → Route 53 → ALB (SSL 종료) → Apache → Tomcat → RDS

개선된 점:


도메인 ALB 연결 완료

축하합니다! 도메인이 성공적으로 ALB를 통해 고가용성 아키텍처에 연결되었습니다. 이제 AWS 관리형 SSL 인증서를 사용하여 더 안정적이고 확장 가능한 HTTPS 웹 서비스를 제공할 수 있습니다.

다음 단계: AWS EDU/Archive/조선대학교 AWS 멘토링/Week3.5-HA-Scalable-WebService/03-Auto-Scaling-Group/01-Auto-Scaling개념에서 자동 확장 기능을 추가하여 트래픽 증가에 자동으로 대응하는 시스템을 구축합니다.


관련 문서: AWS EDU/Archive/조선대학교 AWS 멘토링/Week3.5-HA-Scalable-WebService/02-Application-Load-Balancer/04-Health-Check설정, AWS EDU/Archive/조선대학교 AWS 멘토링/Week3.5-HA-Scalable-WebService/03-Auto-Scaling-Group/01-Auto-Scaling개념